/*
 * Exemple de classe qui pourrait servir au serveur d'application pour l'interface réseau
 * A été testé avec le relais PC et arrive à recevoir les informations provenant de celui-ci
 * Il ne reste qu'à integrer les méthodes provenant du controller principal selon le modèle MVC
 */
package server_relay;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;


/**
 *
 * @author Athéna
 */
/*Interface réseau qui communiquera avec le relais PC*/
public class ServerNI extends Thread {

    private BufferedWriter writers = null;// Buffer d'écriture pour émettre
    private BufferedReader readers = null;//Buffer de lecture pour la réception
    private int port;
    private ServerSocket socket;

    /**
     * @param args the command line arguments
     *
     *
     */
    //Constructeur
    public ServerNI(int port,BufferedWriter w,BufferedReader r){

        this.writers=w;
        this.readers=r;
        this.port = port;
        this.init();
    }

    //Méthode permettant d'initialiser l'interface
    @SuppressWarnings("empty-statement")
    public void init() {
        System.out.println("init serveur");
        InputStream in = null;//Flux d'entrée
        OutputStream out = null;//flux de sortie
        Socket sock = null;
        try {

            socket = new ServerSocket(this.port);
            System.out.println("socket serveur créé");
            System.out.println("Attente de connexion");
            sock = socket.accept();//Acceptation d'une connexion
            System.out.println("connexion");
            in = sock.getInputStream();
            out = sock.getOutputStream();
            writers = new BufferedWriter(new OutputStreamWriter(out));
            readers = new BufferedReader(new InputStreamReader(in));
        } catch (IOException ex) {
            System.out.println("Exception serverNI init");
        }
    }

   @Override
    public void run(){
        System.out.println("Lancement thread serveur fait");
        while(true){
            System.out.println("Réponse reçue: "+this.receiveResponse());
        }

    }

    //Méthode permettant d'envoyer le paquet contenant le nombre de réponses possibles pour une question donnée
    public void sendQuestion(int question){
        //System.out.println("Envoi de nombre de réponses possibles Server "+question);
        
        try {
            writers.write(question);//Ecriture pour envoyer le flux
            //writers.newLine();
            writers.flush();
        } catch (IOException ex) {
            System.out.println("Exception in SendQuestion Method: "+ex);
        }
    }

    //Méthode permettant de recevoir les réponses provenant du relais
    public int receiveResponse(){
        int response = 0;
        try {
            response=readers.read();
        } catch (IOException ex) {
            System.out.println("Exception in receiveResponse: "+ex);
        }
        return response;
    }

    /*public static void main(String[] args) {

         System.out.println("Début");
         BufferedWriter ws2c = null;
         BufferedReader rc2S = null;


         ServerNI server= new ServerNI(4000,ws2c,rc2S);
         System.out.println("Création serveur faite");
         new Thread(server).start();
         System.out.println("Lancement thread server fait");

         int ex=0;
         String m=null;
         while (ex<=10){
             System.out.println("Valeur ex: "+ex);
             m=String.valueOf(ex);
             System.out.println("Envoi de questions server "+ ex);
             server.sendQuestion(m);
             //System.out.println("Réception réponse "+server.receiveResponse());
             ex=ex+1;
         }
     }*/

}
